package com.zecan.blog.service;

import com.zecan.blog.dto.atricle.ArticleDto;
import com.zecan.blog.dto.atricle.UserArticleDto;
import com.zecan.blog.entity.Article;
import com.zecan.blog.vo.achives.ArchivesVo;
import com.zecan.blog.vo.article.ArticleMsgVo;
import com.zecan.blog.vo.article.BlogIndexArticleVo;
import com.zecan.blog.vo.user.UserArticleVo;
import com.zecan.blog.vo.stargood.StarArticleVo;
import com.zecan.blog.vo.user.UserBlogVo;
import org.springframework.web.multipart.MultipartFile;

import java.text.ParseException;
import java.util.List;

/**
 * @ClassName ArticleService
 * @Description
 * @date 2022/10/28 17:55
 * @Version 1.0
 * 文章接口
 */

public interface ArticleService {

    /**
     * 加载主页的时候获取文章信息
     * @param offset 第几页
     * @param limit 用户选择的每页显示几个
     * @return 文章列表
     */
    List<BlogIndexArticleVo> getArticleList(Integer offset , Integer limit) throws ParseException;


    /**
     * 获取文章总数
     * @return 总数
     */
    Integer getArticleCount();

    /**
     * 根据dto中信息获取数据
     * @param articleDto
     * @return
     */
    UserBlogVo getArticleListByUserId(UserArticleDto articleDto);

    /**
     * 获取用户文章内容
     * @param articleId
     * @return
     */
    String getUserArticleContent(Integer articleId);

    /**
     * 根据id 获取文章信息
     * @param articleId
     * @param userId
     * @return
     */
    ArticleMsgVo getArticleByArticleId(Integer articleId,Integer userId);

    /**
     * 逻辑删除文章
     * @param articleId
     */
    void delArticle(Integer articleId);

    /**
     * 添加文章
     * @param article 文章信息
     * @return 返回文章影响的行数 1 是正常 0 插入失败
     */
    Integer addArticle(Article article);


    /**
     * 更新用户的文章
     * @param articleDto
     */
    void updateArticle(ArticleDto articleDto);

    /**
     * 上传文章首页图片信息到alioss中
     * @param multipartFile
     * @return
     */
    String uploadArticleImage(MultipartFile multipartFile);

    /**
     * 上传markdown添加的图片到alioss中
     * @param multipartFile
     * @return
     */
    String uploadMarkdownImage(MultipartFile multipartFile);


    /**
     * 获取用户的收藏文章
     * @param userArticleDto
     * @return
     */
    StarArticleVo getUserFavorite(UserArticleDto userArticleDto);

    List<ArchivesVo> getArticleArchives();

}
